package com.shine.design.pattern.guide.singleton.demo0;

/**
 * @Description: 单例模式，懒汉式，线程安全
 * @CreateTime: 2023/8/27 12:22
 * @Version:
 * @Since: 1.8
 * @Author: Forward Seen
 */
public class Singleton {
    /**
     * 为了确保对象的唯一性，使用类变量static修饰，因为类只加载一次
     */
    private static Singleton singleton;

    /**
     * 将构造函数私有化，这样外部就无法new该类的对象了
     */
    private Singleton() {
    }

    /**
     * 为保证线程的安全性，不能让它重复new对象，加上synchronized锁
     * 因为不能创建对象，所以唯一获取对象的方式就是通过Singleton.getInstance()方式，因此用static修饰
     * @return 唯一的对象实例
     */
    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}